home *** CD-ROM | disk | FTP | other *** search
/ Gekkan Dennou Club 147 / Gekkan Dennou Club - 2000.8 Vol. 147 (Japan).7z / Gekkan Dennou Club - 2000.8 Vol. 147 (Japan) (Track 1).bin / fdimg / oh!.2hd / OH!DEN_B.LZH / TOOLS / CDC / CDCSRC.LZH / TNB.H < prev    next >
Text File  |  1995-03-20  |  26KB  |  867 lines

  1. /*
  2.  * tnb.h for X68k XC Compiler v2.00 Copyright 1993 1994 TNB製作所
  3.  *                              + TNB.L
  4.  *                              + ZMCLIB.L
  5.  */
  6. #include    <IOCSLIB.H>
  7. #include    <DOSLIB.H>
  8. /*
  9. z:\HELP\IOCS_DOC.HLP 1
  10. z:\HELP\DOS_DOC.HLP 1
  11. */
  12. /*    定番    */
  13. #define        UNchar        unsigned char
  14. #define        UNshort        unsigned short
  15. #define        UNint        unsigned int
  16. #define        UNlong        unsigned long
  17. #define        elif        else if
  18. #define        VMODE        0x80000000
  19. /*    インライン関数もどき    */
  20. #define        VADDS(p,x,y)    ( 0xC00000+(p)*0x80000+(x)*2+(y)*1024 )
  21. #define        VADDS_(x,y)    ( (x)*2+(y)*1024 )
  22. #define        ADDS_(x,y)    ( (x)*2+(y)*1024 )
  23. #define        BADDS(p,x,y)    ( 0xEBC000+(p)*0x2000+(x)*2+(y)*0x80 )
  24. #define        BADDS_(x,y)    ( (x)*2+(y)*0x80 )
  25. #define        RR(R)        ( ((R)>> 6) & 0x1F )
  26. #define        GG(G)        ( ((G)>>11) & 0x1F )
  27. #define        BB(B)        ( ((B)>> 1) & 0x1F )
  28. #define        II(I)        ( (I) & 1 )
  29. #define        RGB(R,G,B)    ( ((R)<<6) | ((G)<<11) | ((B)<<1) )
  30. #define        pow2(i)        (1<<(i))
  31. #define        bit(i)        (1<<(i))
  32. #define        nbit(i)        ( 0xFFFFFFFF-(1<<(i)) )
  33. #define        down_for(I,J)    for( I=(J)-1;I>=0;I-- )
  34. #define        B_USER(I)    B_SUPER(I)
  35. #define        B_USER_(I)    {if ( (I)>=2 ) B_SUPER(I);}
  36.  
  37. #ifdef    FORWORD
  38. #define    __PROTO_TYPE
  39. #endif
  40. #ifdef    __STDC__
  41. #define    __PROTO_TYPE
  42. #endif
  43. #ifdef    __PROTO_TYPE
  44. /*------------------------------------------------------*/
  45. /*        STICK関係PROTO            */
  46. /*------------------------------------------------------*/
  47. /*--データ引--*/
  48. /*::ノーマル::*/
  49. long    JOYSTICK1(void);    /*[0BA0RLDU] */
  50. long    JOYSTICK2(void);
  51. /*::マウス::*/
  52. long    MSXMOUSE(long po);
  53.         /* MSXマウス専用
  54.           挿されていない場合は 0x0011が返るがこれでの識別は不可能
  55.             po=0;JOY STICK PORT 1
  56.              !=0;JOY STICK PORT 2
  57.          - - - -  - - [R][L]:[ X 8bit ]:[ Y 8bit  ]
  58.         */
  59. long    SEGAMOUSE(void);
  60.         /* JOY PROT1 マウス
  61.           戻り値が-1の場合 タップ端末マウス情報をSEGAMOUSES[x] に格納
  62.            戻り値が-2の場合 セガマウス接続、情報をSEGAMOUSES[0]に格納
  63.            0の場合 セガマウス(タップ)が接続されていない。
  64.             (スティック情報は格納されない)
  65.         */
  66. struct    SEGAMOUSEPTR {
  67.     unsigned char    type;
  68.     unsigned char    bot;    /*- - [R][L]*/
  69.     char    xm,ym;    /*X,Y移動値*/
  70. };
  71. extern    struct    SEGAMOUSEPTR SEGAMOUSES[4];
  72.             /* SEGAMOUSES は SEGATAPS と同じアドレス!! */
  73. /*::スティック::*/
  74. long    MDJOYSTICK(long po);
  75.         /* メガドラパッド用 68用のものチェック可能
  76.           JOYSTICK?() 同等品
  77.             po=0;JOY STICK PORT 1
  78.              !=0;JOY STICK PORT 2
  79.         */
  80. long    EXJOYSTICK(long po);
  81.         /* ノーマル、リブラブ、CPMD
  82.           JOYSTICK?() 同等品
  83.             po=0;JOY STICK PORT 1
  84.              !=0;JOY STICK PORT 2
  85.         */
  86. long    CYBERSTICK(void);
  87.         /* 戻り値がマイナスの場合 CYBERS に JOY PORT 1 の サイバー
  88.           スティックの情報を読み込みます。
  89.           0の場合(Analog)接続されていない。
  90.         */
  91. struct CYBERPTR {
  92.     unsigned short    bot;    /* 0 0 0 0 [A][B][A][B][A][B][C][D][E1][E2][Sta][SeL]*/
  93.     unsigned char    ud1;
  94.     unsigned char    rl1;
  95.     unsigned char    ud2;
  96.     unsigned char    rl2;
  97. };
  98. extern struct CYBERPTR CYBERS;
  99. /*::マルチタップ::*/
  100. long    SEGATAP(long mo);
  101. long    SEGATAP_(long mo);
  102.         /* セがタップ専用
  103.           戻り値が-1の場合SEGATAPS[x]に情報を格納します
  104.            戻り値が-2の場合 セガマウス接続、情報をSEGAMOUSES[0]に格納
  105.           以外の値はMDJOYSTICK(0)と同。
  106.             mo=0;マウスデータは無視する。type==2の時でもデータは無効
  107.              !=0;マウスデータの収納。type==2のデータは有効(JOYMOUSEPTR[])
  108.               SEGATAP_()はタップとの通信中、他の割り込みを禁止しない
  109.         */
  110. struct    SEGATAPPTR {
  111.     unsigned char    type;    /*pad;0|1      mouse;2 */
  112.     unsigned char    bot;    /*pad;未使用   mouse;- - [R][L]*/
  113.     unsigned short    data;    /*pad;型による mouse;[X 8bit][Y 8bit]*/
  114. };
  115. extern    struct    SEGATAPPTR SEGATAPS[4];
  116.  
  117.  
  118.         /*    JOYSTICK?() MDJOYSTICK() SEGATAPS[?].dataの値
  119.                 各bit 押されていれば 1になる
  120.                         このビットに注目
  121.             ↓       ↓             ↓         ↓ 
  122.         ◎68パット
  123.             0  0   0  0   0  0   0 0 : 0 [B] [A] 0 [R][L][D][U]
  124.           ( 0 [B] [A] 0 [R][L][D][U] : 0 [B] [A] 0 [R][L][D][U] )
  125.         ◎6ボタンパット
  126.           [st][C][B][A][md][X][Y][Z] : 1 [B][c] 0 [R][L][D][U]
  127.         ◎3ボタンパット
  128.           [st][C][B][A]  0  0  0  0  : 1 [B][c] 1 [R][L][D][U]
  129.         ◎マジカルパット
  130.                 1 [B] [D] 0 [RT][LT] 1 1 : 0 [A] [C] 0 [R][L][D][U]
  131.         ◎(EX)リブラブパット
  132.             0  0   0  0 [R][L][D][U] : 0 [B] [A] 0 [R][L][D][U]
  133.         ◎(EX)CPSF-MD パット
  134.             0 [st][C] 0[md][X][Y][Z] : 0 [B] [A] 0 [R][L][D][U]
  135.         ◎(EX)CPSF-PC スティック
  136.             0 [st][L] 0[sl][X][Y][R] : 0 [B] [A] 0 [R][L][D][U]
  137.         ◎(EX)CyberStick-DigtalMode
  138.             0 [E2][E1]0[D][C][S][S]: 0 [B] [A] 0 [R][L][D][U]
  139.         ◎SEGA-TAPパット
  140.           [st][C][B][A][md][X][Y][Z] : 1 [B][c] 0 [R][L][D][U]
  141.           [st][C][B][A]  0  0  0  0  : 1 [B][c] 1 [R][L][D][U]
  142.             SEGATAPPTR.type= 0 ; 3ボタン
  143.                      1 ; 6ボタン
  144.                      2 ; マウス
  145.                     15 ; 非接続
  146.         */
  147. /*--データチェック--*/
  148. /*ノーマル専用(含入力)*/
  149. long    STICK1(void);
  150. long    STRIG1_A(void);
  151. long    STRIG1_B(void);
  152. long    STRIG1_RUN(void);
  153. long    STRIG1_SELECT(void);
  154. long    STICK2(void);
  155. long    STRIG2_A(void);
  156. long    STRIG2_B(void);
  157. long    STRIG2_RUN(void);
  158. long    STRIG2_SELECT(void);
  159. /*多種対応*/
  160. long    STICKD(long d);
  161.     /*    向きを数値で返す
  162.         d=データ
  163.     */
  164. #define    STRIGD_A(d)        ((d)&0x0020)
  165. #define    STRIGD_B(d)        ((d)&0x0040)
  166. #define    STRIGD_AA(d)        ((d)&0x1000)
  167. #define    STRIGD_BB(d)        ((d)&0x2000)
  168. #define    STRIGD_CC(d)        ((d)&0x4000)
  169. #define    STRIGD_XX(d)        ((d)&0x0400)
  170. #define    STRIGD_YY(d)        ((d)&0x0200)
  171. #define    STRIGD_ZZ(d)        ((d)&0x0100)
  172. #define    STRIGD_RUN_(d)        ((d)&0x8000)
  173. #define    STRIGD_SELECT_(d)    ((d)&0x0800)
  174. long    STRIGD_RUN(long d);        /*Towns [Run] 対応*/
  175. long    STRIGD_SELECT(long d);        /*Towns [Sel] 対応*/
  176.  
  177. /*マルチタップ専用*/
  178. #define    JOYSTICKM(n)     ( (SEGATAPS[n].type<=1)?          SEGATAPS[n].data :0 )
  179. #define    STRIGM_A(n)      ( (SEGATAPS[n].type<=1)?STRIGD_A( SEGATAPS[n].data):0 )
  180. #define    STRIGM_B(n)      ( (SEGATAPS[n].type<=1)?STRIGD_B( SEGATAPS[n].data):0 )
  181. #define    STRIGM_AA(n)     ( (SEGATAPS[n].type<=1)?STRIGD_AA(SEGATAPS[n].data):0 )
  182. #define    STRIGM_BB(n)     ( (SEGATAPS[n].type<=1)?STRIGD_BB(SEGATAPS[n].data):0 )
  183. #define    STRIGM_CC(n)     ( (SEGATAPS[n].type<=1)?STRIGD_CC(SEGATAPS[n].data):0 )
  184. #define    STRIGM_XX(n)     ( (SEGATAPS[n].type<=1)?STRIGD_XX(SEGATAPS[n].data):0 )
  185. #define    STRIGM_YY(n)     ( (SEGATAPS[n].type<=1)?STRIGD_YY(SEGATAPS[n].data):0 )
  186. #define    STRIGM_ZZ(n)     ( (SEGATAPS[n].type<=1)?STRIGD_ZZ(SEGATAPS[n].data):0 )
  187. #define    STRIGM_RUN(n)    ( (SEGATAPS[n].type<=1)?(SEGATAPS[n].data & 0x8000):0 )
  188. #define    STRIGM_SELECT(n) ( (SEGATAPS[n].type<=1)?(SEGATAPS[n].data & 0x0800):0 )
  189.  
  190. /*------------------------------------------------------*/
  191. /*                            */
  192. /*        SPRITE関係PROTO            */
  193. /*                            */
  194. /*------------------------------------------------------*/
  195. #define    SP_ON2_S() (*(unsigned short*)0xEB0808|=0x0200)
  196. #define    SP_OFF2_S() (*(unsigned short*)0xEB0808&=0xFDFF)
  197. #define    SP_ON_S() (*(unsigned short*)0xE82600|=0x0040)
  198. #define    SP_OFF_S() (*(unsigned short*)0xE82600&=0xFFBF)
  199. long    SP_COLOR(long pc,long c,long pb);
  200. long    SP_COLOR_S(long pc,long c,long pb);
  201.         /* スプライトカラーチェンジ
  202.             pc=カラーコード(0-15)
  203.             c=カラーナンバー(0-65535) c=-1の場合変更せず現在値を戻す
  204.             pd=カラーブロック(0-15)
  205.            or
  206.             pc=カラーコード(0-255)
  207.             c=カラーナンバー(0-65535) c=-1の場合変更せず現在値を戻す
  208.             pd=0 (固定)
  209.         */
  210. void    SP_DEFCH(long cd,void *,long no);
  211. void    SP_DEFCH_S(long cd,void *,long no);/*SUPER*/
  212.         /* 
  213.  
  214.  
  215.         */
  216. void    SP_MOVE(long n,long x,long y);
  217. void    SP_MOVE_S(long n,long x,long y);
  218.         /* スプライトプレーン移動のみ
  219.             n=プレーンナンバー    x,y=座標
  220.         */
  221. void    BGSET(long BA,long p);
  222. #define    BGSET_S(BA,p)    ( *(unsigned short*)(BA)=(p) )
  223.         /* BGへの書き込み
  224.             BA=BADDS(p,x,y)での指定
  225.             p=    bit 15        垂直反転
  226.                 bit 14        水平反転
  227.                 bit 8,9,10,11    パレット
  228.                 bit 0-7        0-255 キャラナンバー
  229.         */
  230. void    BGTESTST0(long x,long y,long p);
  231. void    BGTESTST0_S(long x,long y,long p);
  232. void    BGTESTST1(long x,long y,long p);
  233. void    BGTESTST1_S(long x,long y,long p);
  234.         /* BGへの書き込み
  235.             x,y=座標 BG1へはy+=32で可能
  236.             p=    bit 15        垂直反転
  237.                 bit 14        水平反転
  238.                 bit 8,9,10,11    パレット
  239.                 bit 0-7        0-255 キャラナンバー
  240.         */
  241. /*------------------------------------------------------*/
  242. /*        GRAPHIC関係PROTO            */
  243. /*------------------------------------------------------*/
  244. #define    GG_ON_S() (*(unsigned short*)0xE82600|=0x000F)
  245. #define    GG_OFF_S() (*(unsigned short*)0xE82600&=0xFFF0)
  246. void    GGPRIORITY(long GP0,long GP1,long GP2,long GP3);
  247.         /* Graphicの4つのプレーンの優先順位を変える
  248.             GP0ーGP3=0から3で、0が一番上
  249.             defaultでは(0,1,2,3)。同じ数字は禁止。
  250.             256色モードではGP0+GP1がペアでページ0
  251.             GP2+GP3がペアでページ1をきめる
  252.         */
  253. void    GGFILL(long VA,long lx,long ly,long c);
  254. void    GGFILL_S(long VA,long lx,long ly,long c);/*SUPER*/
  255. void    GGFILL8(long VA,long lx8,long ly,long c);
  256. void    GGFILL8_S(long VA,long lx8,long ly,long c);/*SUPER*/
  257.         /* GraphicにBOX FILLを書く(全画面対応)
  258.             VA=VADDS(p,x,y)で左上座標
  259.             lx,ly=BOXの辺の長さ
  260.             lx8=横方向のBOXの辺の長さ、ただし実際の1/8で指定。
  261.             c=カラー
  262.         */
  263. void    GGPSET(long VA,long c);
  264. #define    GGPSET_S(VA,c) ( *(unsigned short*)(VA)=(c) )
  265.         /* Graphicに点を打つ(全画面対応)
  266.             VA=VADDS(p,x,y)で座標
  267.             c=カラー
  268.         */
  269. long    GGPALET(long n,long c);
  270. long    GGPALET_S(long n,long c);
  271.         /* パレットチェンジ
  272.             n=パレットコード(画面モードによる)
  273.             c=カラーコード(0-65535)
  274.         */
  275. void    GGMOSAIC(long VA,long lx,long ly,long m);
  276.         /* Graphicの指定範囲内のモザイク処理をする(全画面対応)
  277.             VA=VADDS(p,x,y)で左上座標
  278.             lx,ly=BOXの辺の長さ
  279.             m=モザイクモード
  280.         */
  281. long    GGPOINT(long VA);
  282. #define    GGPOINT_S(VA) ( *(unsigned short*)(VA) )
  283.         /* Graphicの色を返す(全画面対応)
  284.             VA=VADDS(p,x,y)で座標
  285.         */
  286. void    GGGET(long VA,long lx,long ly,void *bu);
  287. void    GGGET_S(long VA,long lx,long ly,void *bu);
  288. void    GGPUT(long VA,long lx,long ly,void *bu);
  289. void    GGPUT_S(long VA,long lx,long ly,void *bu);
  290.         /* Graphicの指定範囲のゲットプット。ただし、256色モード以下用
  291.             VA=VADDS(p,x,y)で左上座標
  292.             lx=横方向のBOXの辺の長さ
  293.             ly=たて方向BOXの辺の長さ
  294.             bu=パッファホインタ。バッファーは要(lx×ly)byte
  295.                 (DMAC使用)
  296.         */
  297. void    GGGET8(long VA,long lx8,long ly,void *bu);/*xは8Dot単位*/
  298. void    GGPUT8(long VA,long lx8,long ly,void *bu);/*xは8Dot単位*/
  299.         /* Graphicの指定範囲のゲットプット。ただし、256色モード以下用
  300.             VA=VADDS(p,x,y)で左上座標
  301.             lx8=横方向のBOXの辺の長さ、ただし実際の1/8で指定。
  302.             ly=たて方向BOXの辺の長さ
  303.             bu=パッファホインタ。バッファーは要(lx8×8×ly)byte
  304.                 (非DMAC使用:ClockUp機に有効!?)
  305.         */
  306. void    GGCOPY(long VA1,long lx,long ly,long VA2);
  307. void    GGCOPY_S(long VA1,long lx,long ly,long VA2);
  308.         /* Graphicの指定範囲のコピー
  309.             VA1=VADDS(p,x,y)で左上座標 sous
  310.             VA2=VADDS(p,x,y)で左上座標 dest
  311.             lx=横方向のBOXの辺の長さ
  312.             ly=たて方向BOXの辺の長さ
  313.         */
  314. #define    GGCOPY8(VA1,lx8,ly,VA2) GGCOPY(VA1,(lx8)*8,ly,VA2)
  315. #define    GGCOPY8_S(VA1,lx8,ly,VA2) GGCOPY_S(VA1,(lx8)*8,ly,VA2)
  316.         /* Graphicの指定範囲のコピー
  317.             VA1=VADDS(p,x,y)で左上座標 sous
  318.             VA2=VADDS(p,x,y)で左上座標 dest
  319.             lx8=横方向のBOXの辺の長さ、ただし実際の1/8で指定。
  320.             ly=たて方向BOXの辺の長さ
  321.         */
  322. void    GGSCRCLS(long m);
  323.         /* Graphicの消去
  324.             m=CLS Mode Nunber
  325.                 0,1 ; Page 0,1の高速クリヤー
  326.                 2,3 ; Page 0,1の変則クリヤー
  327.                 4以上 禁止、動作は保証されない
  328.         */
  329. void    GGSCRCLS2(long VA,long lx8,long ly);
  330.         /* Graphicの消去
  331.             VA=VADDS(p,x,y)で左上座標
  332.             lx8=横方向のBOXの辺の長さ、ただし実際の1/8で指定。
  333.             ly=たて方向BOXの辺の長さ
  334.         */
  335. void    GGCHCOLOR8(long VA,long lx8,long ly,long c1,long c2);
  336.         /* Graphicの指定範囲のカラーチェンジ
  337.             VA1=VADDS(p,x,y)で左上座標 sous
  338.             lx8=横方向のBOXの辺の長さ、ただし実際の1/8で指定。
  339.             c1,c2=c1のカラーナンバーをc2のカラーナンバーへ
  340.         */
  341. /*------------------------------------------------------*/
  342. /*        (GRAPHIC+SPRITE)/2 関係PROTO        */
  343. /*------------------------------------------------------*/
  344. extern volatile void *GGPCG8_BUFF;
  345.         /* GGPCG8()用データの先頭アドレス
  346.             defaultでは0xEB8000(SPRITE DATA ADDS)になっている
  347.         */
  348. void    GGPCG8(long VA,long c);
  349. void    GGPCG8_S(long VA,long c);
  350.         /* GraphicにBGのように表示
  351.             VA = VADDS(p,x,y)で座標指定
  352.             c=    bit 15        垂直反転
  353.                 bit 14        水平反転
  354.                 bit 8,9,10,11    パレット
  355.                 bit 0-7        0-255 キャラナンバー
  356.         */
  357. extern volatile void *GGPCG16_BUFF;
  358.         /* GGPCG16()用データの先頭アドレス
  359.             defaultでは0xEB8000(SPRITE DATA ADDS)になっている
  360.         */
  361. void    GGPCG16(long VA,long c);
  362. void    GGPCG16_S(long VA,long c);
  363.         /* GraphicにBGのように表示
  364.             VA = VADDS(p,x,y)で座標指定
  365.             c=    bit 15        垂直反転
  366.                 bit 14        水平反転
  367.                 bit 8,9,10,11    パレット
  368.                 bit 0-7        0-255 キャラナンバー
  369.         */
  370. /*------------------------------------------------------*/
  371. /*        TEXT関係PROTO            */
  372. /*------------------------------------------------------*/
  373. #define    TX_ON_S() (*(unsigned short*)0xE82600|=0x0020)
  374. #define    TX_OFF_S() (*(unsigned short*)0xE82600&=0xFFDF)
  375. /*------------------------------------------------------*/
  376. /*        FONT関係PROTO            */
  377. /*------------------------------------------------------*/
  378. /*struct    FNTBUF    {
  379.     short    xl,yl;
  380.     unsigned char    buffer[72];
  381. };*/
  382. void    FNTGET8(long KC,struct    FNTBUF *AD);
  383.         /* 8ドット漢字パターンを指定アドレスに書き込む
  384.             KC=漢字コード
  385.             AD=データの書き込まれるアドレス
  386.                 半角のみ 0.w,2.w = Xsize,Ysize(4,8)  全12byte
  387.                 全角のみ 0.w,2.w = Xsize,Ysize(8,8)  全12byte
  388.         */
  389.  
  390. extern volatile void *FNT12_BUFF;
  391.         /*FNTGET12用 12dotFontData:要町等のの先頭アドレス
  392.                0の場合,FNTGET12Tが呼び出される
  393.                 サイズ 215136byte
  394.         */
  395. void    FNTGET12(long KC,struct    FNTBUF *AD);
  396.         /* 12ドット漢字パターンを指定アドレスに書き込む
  397.             KC=漢字コード
  398.             AD=データの書き込まれるアドレス
  399.                 半角のみ 0.w,2.w = Xsize,Ysize(6,12)   全16byte
  400.                 全角のみ 0.w,2.w = Xsize,Ysize(12,12)  全28byte
  401.             FNT12_BUFFが参照される
  402.         */
  403. void    FNTGET12T(long KC,struct    FNTBUF *AD);
  404.         /* 12ドット漢字パターンを指定アドレスに書き込む
  405.             24dotfontをコンバート、全角のみ。半角コードは保証されない
  406.             KC=漢字コード
  407.             AD=データの書き込まれるアドレス
  408.                 全角のみ 0.w,2.w = Xsize,Ysize   全28byte
  409.         */
  410. #define    FNTGET16(A,B) FNTGET(8,A,B)
  411. #define    FNTGET24(A,B) FNTGET(12,A,B)
  412.  
  413. extern volatile long GGCHAR_COLOR1;
  414. extern volatile long GGCHAR_COLOR2;
  415.         /*GGCHAR用カラーコード指定
  416.             c1=文字カラー1(範囲は画面モードによる)
  417.             c2=文字カラー2
  418.         */
  419. void    GGCHAR(long VA,struct FNTBUF *AD);
  420. void    GGCHAR_S(long VA,struct FNTBUF *AD);/*SUPER*/
  421.         /* GRAPHICにCHAR.表示(全画面,24Dotまで対応)
  422.             VA=VADDS(p,x,y)での座標指定
  423.             AD=FNTGET12等でパターンをセットしたアドレス
  424.         */
  425. extern volatile void *FNT8_BUFF;
  426.         /*GGCHAR8/B用 8dotCharData
  427.             指定無い場合、GCROMの物を使用
  428.                 (1*8)*文字数 byte
  429.             moji_s2d.xの出力するデータを使用
  430.         */
  431. void    GGCHAR8(long VA,long CC);
  432. void    GGCHAR8_S(long VA,long CC);
  433.         /* GRAPHICに8DotCHAR.表示(全画面対応)
  434.             VA=VADDS(p,x,y)での座標指定
  435.             CC=キャラクターコード
  436.         */
  437. void    GGCHAR8B(long VA,long CC);
  438. void    GGCHAR8B_S(long VA,long CC);
  439.         /* GGCHAR8()同等品
  440.           GGCHAR_COLOR1:が文字、GGCHAR_COLOR2が背景の色でべた書きする
  441.             VA=VADDS(p,x,y)での座標指定
  442.             CC=キャラクターコード
  443.         */
  444.  
  445. /*------------------------------------------------------*/
  446. /*        TIMING関係PROTO            */
  447. /*------------------------------------------------------*/
  448. void    CRTVDISP(void);
  449. #define    CRTVDISP_S()                    \
  450. asm("@@:        btst.b        #4,$00e88001    \n\
  451.             beq        @b        \n\
  452. @@:            btst.b        #4,$00e88001    \n\
  453.             bne        @b        ");
  454.         /* CRTV同期タイミングを計る    */
  455.  
  456. /*TIMER-D*/
  457. void    timD_start(void);
  458. void    timD_end(void);
  459. void    timD_set(long);
  460. void    timD_weit(void);
  461. long    timD_count(void);
  462. long    timD_countD(void);
  463.         /* 1m秒
  464.  
  465.         */
  466. /*ONTIME*/
  467. void    ONtim_set(long);
  468. void    ONtim_weit(void);
  469. long    ONtim_count(void);
  470.         /* 1/100秒
  471.  
  472.         */
  473. #define    ONtim_countD()    ONTIME()
  474. long    ONtim_margin( long ot,long ma );
  475.         /* ma/100sを過ぎていたら1を返す
  476.             ot=前回conutDで拾った値
  477.             ma= 1/100s
  478.           ex)    i=ONtime_countD();
  479.                 if ( ONtim_margin( i,500 ) ){
  480.                     i=ONtim_countD();
  481.                     いろいろ;
  482.                 }
  483.         */
  484. /*要PROCESS=*/
  485. void    tim_set(long);
  486. void    tim_weit(void);
  487. long    tim_count(void);
  488. long    tim_countD(void);
  489. #define    tim_countD()    TIME_PR()
  490.         /* 1m秒
  491.  
  492.         */
  493. /*------------------------------------------------------*/
  494. /*        CALC関係 PROTO            */
  495. /*------------------------------------------------------*/
  496. long    isqrt( long r );
  497.         /* 整数平方根
  498.             戻り値=(long)( √r )
  499.         */
  500. #ifdef __GNUC__
  501.  
  502. #define    MULU(o1,o2) ( (unsigned short)(o1)*(unsigned short)(o2) )
  503. #define    MULS(o1,o2) ( (short)(o1)*(short)(o2) )
  504. static inline int DIVU(long o1,long o2);
  505. static inline int DIVS(long o1,long o2);
  506. static inline int MODU(long o1,long o2);
  507. static inline int MODS(long o1,long o2);
  508.  
  509. #else
  510.  
  511. int    MULU(long o1,long o2);
  512. int    MULS(long o1,long o2);
  513. int    DIVU(long o1,long o2);
  514. int    DIVS(long o1,long o2);
  515. int    MODU(long o1,long o2);
  516. int    MODS(long o1,long o2);
  517.  
  518. #endif
  519.  
  520. /*------------------------------------------------------*/
  521. /*        ETC PROTO                */
  522. /*------------------------------------------------------*/
  523. long    CHILD(void *st);
  524. /*long    child(void *st);*/
  525.  
  526. void    PRIORITY(long SP,long TX,long GG);
  527. void    scr_prior(long,long,long);/*旧書式*/
  528.         /* スプライト、テキスト、グラフィックの優先順位を変える
  529.             SP=スプライト画面
  530.             TX=テキスト画面
  531.             GG=グラフィック画面
  532.                 0から2で、0が一番上
  533.                 defaultでは(0,1,2)。同じ数字は禁止(Err CHKはしてません)。
  534.         */
  535. void    PRTK_OFF(void);
  536. void    PRTK_RECOVER(void);
  537.         /* COPY KEY キャンセル
  538.            COPY KEY 復活
  539.         */
  540. void    INTPT_OFF(void);
  541.         /* INTERRUPTswでの割り込みを禁止*/
  542. long    INTPT_CHK(void);
  543.         /* INTPT_OFF()実行後、ボタンが押されていたら1を返す
  544.             この関数がコールされたら、フラグはクリアされる
  545.         */
  546. void    INTPT_RECOVER(void);
  547.         /* もとに戻す */
  548.  
  549. void    qsort_w(void *, long, long (*)(const void *, const void *));
  550.         /* qsort()の配列要素サイズが2に固定されているもの*/
  551.  
  552.  
  553. #else
  554.  
  555. long    SP_COLOR();
  556. void    SP_DEFCH();
  557. void    SP_DEFCH_S();/*SUPER*/
  558. void    SP_REGST_MV();
  559.  
  560. void    GGFILL();
  561. void    GGFILL_S();/*SUPER*/
  562. void    GGPSET();
  563. void    GGPSET_S();
  564. long    GGPALET();
  565. void    GGMOSAIC();
  566.  
  567. void    GGGET8();/*xは8Dot単位*/
  568. void    GGPUT8();/*xは8Dot単位*/
  569. void    GGCOPY();
  570. void    GGCOPY_S();/*SUPER*/
  571. void    GGSCRCLS();
  572. void    GGSCRCLS2();
  573. void    GGCHCOLOR8();
  574.  
  575. void    CRTVDISP();
  576. void    CRTVDISP_S();
  577.  
  578. long    STICK1(void);
  579. long    STRIG1_A(void);
  580. long    STRIG1_B(void);
  581. long    STRIG1_RUN(void);
  582. long    STRIG1_SELECT(void);
  583. long    JOYSTICK1(void);    /*[-BA-RLDU] *
  584. long    STICK2(void);
  585. long    STRIG2_A(void);
  586. long    STRIG2_B(void);
  587. long    STRIG2_RUN(void);
  588. long    STRIG2_SELECT(void);
  589. long    JOYSTICK2(void);
  590.  
  591. /*要PROCESS=*/
  592. void    tim_set();
  593. void    tim_weit();
  594. long    tim_count();
  595.  
  596. /*TIMER-D*/
  597. void    timD_start();
  598. void    timD_end();
  599. void    timD_set();
  600. void    timD_weit();
  601. long    timD_count();
  602.  
  603. void    DRAWMODE();
  604. void    FNTGET12();
  605.  
  606. void    PRTK_OFF();
  607. void    PRTK_RECOVER();
  608.  
  609. void    INTPT_OFF();
  610. long    INTPT_CHK();
  611. void    INTPT_RECOVER();
  612.  
  613.  
  614. #endif
  615.  
  616.  
  617.  
  618. /*-----------------ZMCLIB---------------*/
  619.  
  620.  
  621.  
  622. struct    ZMreturn {
  623.     long    D0;
  624.     long    A0;
  625. };
  626. struct    ZMplaytmp {
  627.     unsigned long    d2;
  628.     unsigned long    d3;
  629.     unsigned long    d4;
  630. };
  631.  
  632. #ifdef    __PROTO_TYPE
  633.  
  634. long    Zm_drvchk( void );    /*-1:常駐 0:なし*/
  635. void    Zm_init( void );
  636. long    Zm_alloc( long,long );
  637. long    Zm_assign( long,long );
  638. long    Zm_vget( long,void * );
  639. long    Zm_vset( long,void * );
  640. long    Zm_tempo( long );
  641. void    Zm_tempo2( struct ZMreturn * );
  642. long    Zm_trk( long,long );
  643. void    Zm_trk_a( struct ZMreturn * );
  644. long    Zm_free( long );
  645. long    Zm_play( struct ZMplaytmp * );
  646. unsigned long    m_stat( unsigned long );
  647. long    Zm_stop( struct ZMplaytmp * );
  648. long    Zm_cont( struct ZMplaytmp * );
  649. long    Zm_atoi( long );
  650. void    Zinit_all( void );
  651. void    Zinit_stop( void );
  652. long    Zadpcm_read( long,short,short,unsigned short,short );
  653. long    Zplay_cnv_data( long,void * );
  654. void    Zse_play( long,void * );
  655. void    Zse_adpcm1( void *,long,short,short );
  656. void    Zse_adpcm2( long,short,short );
  657. void    Zset_ch_mode( long );
  658. void    Zcalc_total( long );
  659. void    Zfade_out( long );
  660. long    Zm_vset2( long,void * );
  661. long    Zblock_adpcm_data( void * );
  662. void    Zget_trk_tbl( struct ZMreturn * );
  663. long    Zget_timer_mode( void );
  664. void    Zset_fm_master_vol( long );
  665. void    Zset_timer_value( long );
  666. void    Zjump_active( long );
  667. void    Zset_mclk( long );
  668. /*Zset_loop_time.s    1:*/
  669. /*Zget_play_work.s    1:*/
  670. /*Zrelease_support.s    1:*/
  671.  
  672. #undef    __PROTO_TYPE
  673. #else
  674.  
  675. void    Zm_init();
  676. long    Zm_alloc();
  677. long    Zm_assign();
  678. long    Zm_vget();
  679. long    Zm_vset();
  680. long    Zm_tempo();
  681. void    Zm_tempo2();
  682. long    Zm_trk();
  683. void    Zm_trk_a()
  684. long    Zm_free();
  685. long    Zm_play();
  686. unsigned long    m_stat();
  687. long    Zm_stop();
  688. long    Zm_cont();
  689. long    Zm_atoi();
  690. void    Zinit_all();
  691. void    Zinit_stop();
  692. long    Zadpcm_read();
  693. long    Zplay_cnv_data();
  694. void    Zse_play();
  695. void    Zse_adpcm1();
  696. void    Zse_adpcm2();
  697. void    Zset_ch_mode();
  698. void    Zcalc_total();
  699. void    Zfade_out();
  700. long    Zm_vset2();
  701. long    Zblock_adpcm_data();
  702. void    Zget_trk_tbl();
  703. long    Zget_timer_mode();
  704. void    Zset_fm_master_vol();
  705. void    Zset_timer_value();
  706. void    Zjump_active();
  707. void    Zset_mclk();
  708.  
  709. #endif
  710. /*-----------------ZMCLIB---------------*/
  711.  
  712. #ifdef __GNUC__
  713.  
  714. /*        インラインマクロ定義        */
  715.  
  716. /*IOCS*/
  717. #define    BITSNS(gr)                        \
  718.     ({register long    _d0 asm("d0");                \
  719.     register long    _d1 asm("d1");                \
  720.     _d0=0x04;                        \
  721.     _d1=(gr);                        \
  722.     asm("trap #15"                        \
  723.         :"=d"(_d0)                    \
  724.         :"0"(_d0),"d"(_d1)                \
  725.         :"d0","d1");                    \
  726.     _d0;                            \
  727.     })
  728. #define    MS_CURGT()                        \
  729.     ({register long    _d0 asm("d0");                \
  730.     _d0=0x75;                        \
  731.     asm("trap #15":"=d"(_d0):"0"(_d0):"d0");        \
  732.     _d0;                            \
  733.     })
  734. #define    MS_GETDT()                        \
  735.     ({register long    _d0 asm("d0");                \
  736.     _d0=0x74;                        \
  737.     asm("trap #15":"=d"(_d0):"0"(_d0):"d0");        \
  738.     _d0;                            \
  739.     })
  740.  
  741. /*アクセスランプを反転する*/
  742. #define    TIMER_LED()                        \
  743.     asm("    bset    #0,$00e8a01b                \
  744.         eori.b    #%0000_0111,$00e8a001            \
  745.     ");
  746.  
  747. /* 文字列操作マクロ */
  748. #define strcpy_(DES,SRC)            \
  749. do {    char *_d = (char *)(DES);    \
  750.     char *_s = (char *)(SRC);    \
  751.     while (*_d ++ = *_s ++);    \
  752. } while (0)
  753. #define strcat_(SR0,SR1)            \
  754. do {    char *_d = (char *)(SR0);    \
  755.     char *_s = (char *)(SR1);    \
  756.     while (*_d++ );            \
  757.     _d--;                \
  758.     while (*_d ++ = *_s ++);    \
  759. } while (0)
  760. #define strlen_(SR)            \
  761. ({ char *_p = (SR);long _l = 0;        \
  762.     while (*_p ++) _l++;        \
  763.     (_l-1);                \
  764. })
  765.  
  766. #endif
  767.  
  768. /*    メモ    */
  769. /*
  770. -----------------------------------------------------
  771.         CMP    x,y
  772.     符号なし        符号あり
  773.  
  774. y > x    HI (High)        GT (greater Than)
  775. y >= x    CC (Carry Clear)    GE (Greater Equal)
  776. y = x    EQ (Equal)        EQ (Equal)
  777. y != x    NE (Not Equal)        NE (Not Equal)
  778. y < x    CS (Carry Set)        LT (Less Than)
  779. y <= x    LS (Lower or Same)    LE (Less or Equal)
  780.  
  781.         PL (Plus)        MI (Minus)
  782.         VC (Overflow Clear)    VS (Overflow Set
  783.         F  (always False)    T  (always True)
  784. -----------------------------------------------------
  785.     screen(s,j,r,g)
  786.         s=    0 : 256×256
  787.             1 : 512×512
  788.             2 : 768×512
  789.         j=    0 : 1024×1024 16color Page0
  790.             1 : 512×512 16color Page0-3
  791.             2 : 512×512 256color Page0,1
  792.             3 : 512×512 65536color Page0
  793.         r=    0 : LowRes
  794.             1 : HighRes
  795.         g=    0 : Graphic Off
  796.             1 : Graphic On
  797. -----------------------------------------------------
  798.     Video Controler R1 $E82500
  799.  
  800.    FE    DC    BA    98    76    54    32    10
  801. ┌──┬──┬──┬──┰──┬──┬──┬──┐
  802. │'00'│ SP │ TX │ GG ┃ GP3│ GP2│ GP1│ GP0│
  803. └──┴──┴──┴──┸──┴──┴──┴──┘
  804.  
  805. SP    スプライト+BG
  806. TX    テキスト        0-2で0が一番上に
  807. GG    全グラフィック
  808.  
  809. GP?    各グラフィックプレーン    0-3で0が一番上に
  810. -----------------------------------------------------
  811.     Video Controler R2 $E82600
  812.  
  813.    15    14    13    12    11    10     9     8
  814. ┌──┬──┬──┬──┰──┬──┬──┬──┰
  815. │ YS │ AH │ VHT│EXON┃ H/P│ B/P│ G/G│ G/T┃
  816. └──┴──┴──┴──┸──┴──┴──┴──┸
  817. YS    0; ノーマル        1;スーパーインポーズ時でもVideo画像無し
  818. AH    0; ノーマル        1; GG+TextPalet0
  819. VHT    0; ノーマル        1; GG+Video画像
  820. EXON    0; ノーマル        1; H/P 有効
  821. H/P    0; 特殊プライオリティ    1; 半透明  mode
  822. B/P    0; SHARP 予約        1; H/P 領域指定に最下BIT
  823. G/G    0; ノーマル        1; GG0とGG1の半透明
  824. G/T    0; ノーマル        1; GGと下位スクリーンの半透明
  825.  
  826.         7     6     5     4     3     2     1     0
  827.     ┰──┬──┬──┬──┰──┬──┬──┬──┐
  828.     ┃ '0'│ SON│ TON│ GS4┃ GS3│ GS2│ GS1│ GS0│
  829.     ┸──┴──┴──┴──┸──┴──┴──┴──┘
  830.     SON    0; SP画面非表示        1; SP画面表示
  831.     TON    0; TX画面非表示        1; TX画面表示
  832.     GS4    0; GG画面非表示        1; 実サイズ1024×1024 GG画面表示
  833.     GS3    0; Gplen3 非表示    1; Gplen3 表示
  834.     GS2    0; Gplen2 非表示    1; Gplen2 表示
  835.     GS1    0; Gplen1 非表示    1; Gplen1 表示
  836.     GS0    0; Gplen0 非表示    1; Gplen0 表示
  837.      bit7:があやしい!! 謎の半透明モードになる
  838.  
  839. $EB0808 bit 9    0;SPRITE/BG 表示OFF (ハイアクセス)
  840.         1;SPRITE/BG 表示ON
  841.  
  842.  
  843. -----------------------------------------------------
  844.  
  845.     BITSNS 
  846. │g:a\b│ 7 │ 6 │ 5 │ 4 │ 3 │ 2 │ 1 │ 0 │
  847. ├───┼───┼───┼───┼───┼───┼───┼───┼───┤
  848. │ 0:00│  6&  │  5%  │  4$  │  3#  │  2"  │  1!  │  ESC │未定義│
  849. │ 1:08│  BS  │  \|  │  ^~  │  -=  │  0   │  9)  │  8(  │  7'  │
  850. │ 2:10│  U  │  Y  │  T  │  R  │  E  │  W  │  Q  │  TAB │
  851. │ 3:18│  S  │  A  │ [CR] │  [   │  @`  │  P  │  O  │  I  │
  852. │ 4:20│  ;+  │  L  │  K  │  J  │  H  │  G  │  F  │  D  │
  853. │ 5:28│  N  │  B  │  V  │  C  │  X  │  Z  │   ]  │  :*  │
  854. │ 6:30│  DEL │ HOME │ [SP] │   _  │  /?  │  .>  │  ,<  │  M  │
  855. │ 7:38│  CLR │  ↓  │  →  │  ↑  │  ←  │ UNDO │Rolldn│Rollup│
  856. │ 8:40│  4  │  +  │  9  │  8  │  7  │  -  │  *  │  /  │
  857. │ 9:48│  0  │ ENTER│  3  │  2  │  1  │  =  │  6  │  5  │
  858. │ A:50│  XF3 │  XF2 │  XF1 │ HELP │ 登録 │ 記号 │  .  │  ,  │
  859. │ B:58│ ヒカナ │  INS │ CAPS │コード│ ローマ字│ かな │  XF5 │  XF4 │
  860. │ C:60│ F5 │ F4 │ F3 │ F2 │ F1 │ COPY │ BREAK│ 全角 │
  861. │ D:68│未定義│未定義│未定義│ F10 │ F9 │ F8 │ F7 │ F6 │
  862. │ E:70│未定義│未定義│未定義│未定義│ OPT.2│ OPT.1│ CTRL │ SHIFT│
  863. │ F:78│未定義│未定義│未定義│未定義│未定義│未定義│未定義│未定義│
  864.  
  865. */
  866.  
  867.